#!/usr/bin/python
import sys
import os
import pexpect
import time
import pp
def expectandshow(child, expect):
        index=child.expect(expect)
        print child.before,child.after,
        return index
def set_etc_hosts(ip,order):
	password="passw0rd"
	cmd = "ssh root@" + ip + " " + \
                " echo \'127.0.0.1       localhost.localdomain localhost\' > /etc/hosts;"

        for aip in order:
                cmd += "echo \'"+aip+" "+aip+"\' >> /etc/hosts;"
        cmd += "/bin/hostname "+ip  
        print cmd
        scp_child=pexpect.spawn(cmd)
        index=expectandshow(scp_child, \
                                ['Are you sure you want to continue connecting', \
                                "root@"+ip+"'s password:", \
                                pexpect.TIMEOUT, \
                                pexpect.EOF])
        if index == 0:
                scp_child.sendline('yes')
                ret = expectandshow(scp_child, ["root@"+ip+"'s password:", pexpect.EOF])
                if ret == 0:
                        scp_child.sendline(password)
                        expectandshow(scp_child, [pexpect.EOF])
                elif ret == 1:
                        pass            
        elif index == 1:
                scp_child.sendline(password)                    
                expectandshow(scp_child, [pexpect.EOF])         
        elif index == 2:
                print "timeout, ignore and continue."
        elif index == 3:
                pass    


order=[]
path=sys.path[0]
fp_intr = open(path+'/ip','r')
total_ip = 0
while True:
    	line = fp_intr.readline()
    	length = len(line)
	if length == 0: # Zero length indicates EOF
        	break
	line=line[0:length-1] 
	total_ip += 1
	print line
	order.append(line)
fp_intr.close()
#total_ip=1
start_time = time.time()
ppservers = ()
job_server = pp.Server(total_ip, ppservers=ppservers)
print "Starting pp with", job_server.get_ncpus(), "workers"
jobs = []
for ip in order:
        jobs.append(job_server.submit(set_etc_hosts, (ip,order,), (expectandshow,), ("pexpect",)))

for job in jobs:
    job()

print "Time elapsed: ", time.time() - start_time, "s"

job_server.print_stats()

	
